iT邦幫忙

2022 iThome 鐵人賽

DAY 3
0
Software Development

Java入門的30張門票系列 第 3

[Day3] Java世界裡各式各樣的運算子

  • 分享至 

  • xImage
  •  

Java提供非常多種運算子,但運算子(operators)到底是什麼?它可以對一個、兩個或是三個運算元進行運算動作,執行運算元會將值回傳,至於回傳值的型態則是根據運算元不同而有差異。

算術運算子

算術運算子也被稱為二元運算子,其實就是算數學時也常看到的符號。

int a = 2; int b = 1;
System.out.print(a+b);  // 相加, 3
System.out.print(a-b);  // 相減, 1
System.out.print(a*b);  // 相乘, 2
System.out.print(a/b);  // 相除, 2
System.out.print(a%b);  // 取a除以b後的餘數, 0

如果兩個運算元的型態不相等,運算後回傳值的型態會跟運算元位階高的相同,像是5.0/2=2.5,但如果兩個運算元都是基本型別,至少會轉換成int。

遞增遞減運算子

這個運算子只有兩種++和--,但有四種不同情況,它們分為後置型和前置型。後置型就是放在變數後面,像是a++,它是先取值之後再遞增;前置型(++a)則是先遞增後再取值。

int a = 5; int b = 5;
System.out.print(a++);  // 5
System.out.print(a);  // 6
System.out.print(++b);  // 6
System.out.print(b);  // 6

指定運算子

指定運算子是將右邊運算的結果指定給左邊的變數保存起來,很特別的是程式中的=並不是數學上等於的意思,而是指定,也因此右邊的值的位階是不能高過左邊的位階。
剛剛算術運算子的地方也有提到位階,這邊講一下位階的高低順序:double>float>long>int>short>byte。

int a = 5;
System.out.print(a=3);  // 3, a=3
System.out.print(a+=2);  // 5, a=a+2
System.out.print(a-=2);  // 3, a=a-2
System.out.print(a*=3);  // 9, a=a*3
System.out.print(a/=3);  // 3, a=a/3
System.out.print(a%=2);  // 1, a=a%2

關係運算子

關係運算子其實非常的簡單,就是用來比大小的,它的回傳值結果會是布林值,也就是true或false。

int a = 2; int b = 1;
System.out.print(a<b);  // false, a是否小於b
System.out.print(a<=b);  // false, a是否小於等於b
System.out.print(a==b);  // false, a是否等於b
System.out.print(a>=b);  // true, a是否大於等於b
System.out.print(a>b);  // true, a是否大於b

條件運算子

條件運算子是將兩個布林值合併起來的運算子,它的運算結果和關係運算子一樣都是布林值(true或false)。
其實這種運算子有六種

  1. &&:用法是a && b,當a和b都是true時回傳true,邏輯上就像是and(捷徑)
  2. ||:用法是a || b,a和b只要有一個是true就會回傳true,邏輯上就像是or(捷徑)
  3. !:用法是! a,會傳回相反的布林值,邏輯上就像是not
  4. &:用法是a & b,當a和b都是true時回傳true,邏輯上就像是and(一般)
  5. |:用法是a || b,a和b只要有一個是true就會回傳true,邏輯上就像是or(一般)
  6. ^:用法是a ^ b,當a和b一個是true一個是false時才會回傳true,邏輯上就像是xor
    可以看到上面有分為捷徑和一般,那到底是差在哪裡呢?像是&&必須是兩邊都為true才回傳true,若a為false,程式就不會去看b是true還是false了,但如果你使用的是&,程式會分別算出ab究竟是true還是false,在速度上就會差很多。不過後面三種其實非常的少見,主要都是使用前三種。

位元運算子

我們都知道資料在電腦中都是以0和1的方式儲存,所謂的位元運算其實就是逐位元進行比較。
條件運算子中&、|、^還有第二種身份,那就是位元運算子,它們可以用在整數的位元運算。除了這三種還有一個~,它會將位元1變成0,0變成1。

// & (and)
int a = 15;                 // 00000000000000000000000000001111
int b = 30;                 // 00000000000000000000000000011110
System.out.print(a&b);  // 14, 00000000000000000000000000001110
// | (or)
a = 15;                     // 00000000000000000000000000001111
b = 30;                     // 00000000000000000000000000011110
System.out.print(a|b);  // 31, 00000000000000000000000000011111
// ^ (xor)
a = 15;                     // 00000000000000000000000000001111
b = 30;                     // 00000000000000000000000000011110
System.out.print(a^b);  // 17, 00000000000000000000000000010001
// ~ (位元翻轉)
a = 15;                     // 00000000000000000000000000001111
System.out.print(~a);  // -16, 11111111111111111111111111110000

移位運算子

移位運算子是用在整數int或是long型態的,它目的是向左或向右移動目標運算元的每個位元。>>和>>>的差異是後者不會管當前的符號位元,直接右移補0。若右邊參數超過本身型態的位元數會以餘數作為移位的次數。

int a = 8;                      // 00000000000000000000000000001000
int b = 2;
System.out.println(a>>b);   // 2,  00000000000000000000000000000010, 將a向右移動b位元
System.out.println(a<<b);   // 32, 00000000000000000000000000100000, 將a向左移動b位元
System.out.println(a>>>b);  // 2,  00000000000000000000000000000010, 將a向右移動b位元

三元運算子

終於到最後一個了。三元運算子其實就是一個簡略的if-else敘述。它的用法是a?b:c,也就是如果條件a為true就執行運算式b,如果條件a為false就執行運算式c。如果你平常有在用excel會發現它們是差不多的。

呼終於打完了好多好多字/images/emoticon/emoticon13.gif,希望大家都可以看得懂~


上一篇
[Day2] 淺談基本資料型別 & 變數宣告
下一篇
[Day4] 物件參考變數又是什麼變數
系列文
Java入門的30張門票30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言